home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / turric03.zip / TURRIC03.ZIP / PROGS / M-ZOMBIE.QC < prev    next >
Text File  |  1997-01-30  |  18KB  |  417 lines

  1. /*
  2. ==============================================================================
  3.  
  4. ZOMBIE MORPH
  5.  
  6. ==============================================================================
  7. */
  8. $cd /raid/quake/id1/models/zombie
  9.  
  10. $origin    0 0 24
  11.  
  12. $base base
  13. $skin skin
  14.  
  15. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
  16. $frame stand9 stand10 stand11 stand12 stand13 stand14 stand15
  17.  
  18. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10 walk11
  19. $frame walk12 walk13 walk14 walk15 walk16 walk17 walk18 walk19
  20.  
  21. $frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12
  22. $frame run13 run14 run15 run16 run17 run18
  23.  
  24. $frame atta1 atta2 atta3 atta4 atta5 atta6 atta7 atta8 atta9 atta10 atta11
  25. $frame atta12 atta13
  26.  
  27. $frame attb1 attb2 attb3 attb4 attb5 attb6 attb7 attb8 attb9 attb10 attb11
  28. $frame attb12 attb13 attb14
  29.  
  30. $frame attc1 attc2 attc3 attc4 attc5 attc6 attc7 attc8 attc9 attc10 attc11
  31. $frame attc12
  32.  
  33. $frame paina1 paina2 paina3 paina4 paina5 paina6 paina7 paina8 paina9 paina10
  34. $frame paina11 paina12
  35.  
  36. $frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  37. $frame painb11 painb12 painb13 painb14 painb15 painb16 painb17 painb18 painb19
  38. $frame painb20 painb21 painb22 painb23 painb24 painb25 painb26 painb27 painb28
  39.  
  40. $frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
  41. $frame painc11 painc12 painc13 painc14 painc15 painc16 painc17 painc18
  42.  
  43. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  44. $frame paind11 paind12 paind13
  45.  
  46. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  47. $frame paine11 paine12 paine13 paine14 paine15 paine16 paine17 paine18 paine19
  48. $frame paine20 paine21 paine22 paine23 paine24 paine25 paine26 paine27 paine28
  49. $frame paine29 paine30
  50.  
  51. $frame cruc_1 cruc_2 cruc_3 cruc_4 cruc_5 cruc_6
  52.  
  53. /* Morph to zombie */
  54.  
  55. void() player_zombie_stand = [ $stand1, player_stand1 ] {
  56.     if(self.walkframe >= 15)
  57.         self.walkframe = 0;
  58.         if(self.health < 75) self.health = self.health + 1; // Zombies regenerate
  59.     self.frame = $stand1 + self.walkframe;
  60.     self.walkframe = self.walkframe + 1;
  61. };
  62.  
  63. void() player_zombie_run = [ $run1, player_run ] {
  64.     if(self.walkframe >= 19)
  65.         self.walkframe = 0;
  66.     self.frame = $run1 + self.walkframe;
  67.     self.walkframe = self.walkframe + 1;
  68. };
  69.  
  70. ////////////////////////////////////////////
  71. // 12 frames of paina for player_zombie, going to stand
  72. ////////////////////////////////////////////
  73.  
  74. void() player_zombie_paina1 = [ $paina1, player_zombie_paina2 ] {self.attack_finished=time+10; self.movetype=MOVETYPE_NONE;};
  75. void() player_zombie_paina2 = [ $paina2, player_zombie_paina3 ] { };
  76. void() player_zombie_paina3 = [ $paina3, player_zombie_paina4 ] { };
  77. void() player_zombie_paina4 = [ $paina4, player_zombie_paina5 ] { };
  78. void() player_zombie_paina5 = [ $paina5, player_zombie_paina6 ] { };
  79. void() player_zombie_paina6 = [ $paina6, player_zombie_paina7 ] { };
  80. void() player_zombie_paina7 = [ $paina7, player_zombie_paina8 ] { };
  81. void() player_zombie_paina8 = [ $paina8, player_zombie_paina9 ] { };
  82. void() player_zombie_paina9 = [ $paina9, player_zombie_paina10 ] { };
  83. void() player_zombie_paina10 = [ $paina10, player_zombie_paina11 ] { };
  84. void() player_zombie_paina11 = [ $paina11, player_zombie_paina12 ] { };
  85. void() player_zombie_paina12 = [ $paina12, player_stand1 ] {self.attack_finished=time; self.movetype=MOVETYPE_WALK;};
  86.  
  87. ////////////////////////////////////////////
  88. // 28 frames of painb for player_zombie, going to stand
  89. ////////////////////////////////////////////
  90.  
  91. void() player_zombie_painb1 = [ $painb1, player_zombie_painb2 ] {self.attack_finished=time+10; self.movetype=MOVETYPE_NONE;};
  92. void() player_zombie_painb2 = [ $painb2, player_zombie_painb3 ] { };
  93. void() player_zombie_painb3 = [ $painb3, player_zombie_painb4 ] { };
  94. void() player_zombie_painb4 = [ $painb4, player_zombie_painb5 ] { };
  95. void() player_zombie_painb5 = [ $painb5, player_zombie_painb6 ] { };
  96. void() player_zombie_painb6 = [ $painb6, player_zombie_painb7 ] { };
  97. void() player_zombie_painb7 = [ $painb7, player_zombie_painb8 ] { };
  98. void() player_zombie_painb8 = [ $painb8, player_zombie_painb9 ] { };
  99. void() player_zombie_painb9 = [ $painb9, player_zombie_painb10 ] { };
  100. void() player_zombie_painb10 = [ $painb10, player_zombie_painb11 ] { };
  101. void() player_zombie_painb11 = [ $painb11, player_zombie_painb12 ] { };
  102. void() player_zombie_painb12 = [ $painb12, player_zombie_painb13 ] { };
  103. void() player_zombie_painb13 = [ $painb13, player_zombie_painb14 ] { };
  104. void() player_zombie_painb14 = [ $painb14, player_zombie_painb15 ] { };
  105. void() player_zombie_painb15 = [ $painb15, player_zombie_painb16 ] { };
  106. void() player_zombie_painb16 = [ $painb16, player_zombie_painb17 ] { };
  107. void() player_zombie_painb17 = [ $painb17, player_zombie_painb18 ] { };
  108. void() player_zombie_painb18 = [ $painb18, player_zombie_painb19 ] { };
  109. void() player_zombie_painb19 = [ $painb19, player_zombie_painb20 ] { };
  110. void() player_zombie_painb20 = [ $painb20, player_zombie_painb21 ] { };
  111. void() player_zombie_painb21 = [ $painb21, player_zombie_painb22 ] { };
  112. void() player_zombie_painb22 = [ $painb22, player_zombie_painb23 ] { };
  113. void() player_zombie_painb23 = [ $painb23, player_zombie_painb24 ] { };
  114. void() player_zombie_painb24 = [ $painb24, player_zombie_painb25 ] { };
  115. void() player_zombie_painb25 = [ $painb25, player_zombie_painb26 ] { };
  116. void() player_zombie_painb26 = [ $painb26, player_zombie_painb27 ] { };
  117. void() player_zombie_painb27 = [ $painb27, player_zombie_painb28 ] { };
  118. void() player_zombie_painb28 = [ $painb28, player_stand1 ] {self.attack_finished=time; self.movetype=MOVETYPE_WALK;};
  119.  
  120. ////////////////////////////////////////////
  121. // 18 frames of painc for player_zombie, going to stand
  122. ////////////////////////////////////////////
  123.  
  124. void() player_zombie_painc1 = [ $painc1, player_zombie_painc2 ] {self.attack_finished=time+10; self.movetype=MOVETYPE_NONE;};
  125. void() player_zombie_painc2 = [ $painc2, player_zombie_painc3 ] { };
  126. void() player_zombie_painc3 = [ $painc3, player_zombie_painc4 ] { };
  127. void() player_zombie_painc4 = [ $painc4, player_zombie_painc5 ] { };
  128. void() player_zombie_painc5 = [ $painc5, player_zombie_painc6 ] { };
  129. void() player_zombie_painc6 = [ $painc6, player_zombie_painc7 ] { };
  130. void() player_zombie_painc7 = [ $painc7, player_zombie_painc8 ] { };
  131. void() player_zombie_painc8 = [ $painc8, player_zombie_painc9 ] { };
  132. void() player_zombie_painc9 = [ $painc9, player_zombie_painc10 ] { };
  133. void() player_zombie_painc10 = [ $painc10, player_zombie_painc11 ] { };
  134. void() player_zombie_painc11 = [ $painc11, player_zombie_painc12 ] { };
  135. void() player_zombie_painc12 = [ $painc12, player_zombie_painc13 ] { };
  136. void() player_zombie_painc13 = [ $painc13, player_zombie_painc14 ] { };
  137. void() player_zombie_painc14 = [ $painc14, player_zombie_painc15 ] { };
  138. void() player_zombie_painc15 = [ $painc15, player_zombie_painc16 ] { };
  139. void() player_zombie_painc16 = [ $painc16, player_zombie_painc17 ] { };
  140. void() player_zombie_painc17 = [ $painc17, player_zombie_painc18 ] { };
  141. void() player_zombie_painc18 = [ $painc18, player_stand1 ] {self.attack_finished=time; self.movetype=MOVETYPE_WALK;};
  142.  
  143. ////////////////////////////////////////////
  144. // 13 frames of paind for player_zombie, going to stand
  145. ////////////////////////////////////////////
  146.  
  147. void() player_zombie_paind1 = [ $paind1, player_zombie_paind2 ] {self.attack_finished=time+10; self.movetype=MOVETYPE_NONE;};
  148. void() player_zombie_paind2 = [ $paind2, player_zombie_paind3 ] { };
  149. void() player_zombie_paind3 = [ $paind3, player_zombie_paind4 ] { };
  150. void() player_zombie_paind4 = [ $paind4, player_zombie_paind5 ] { };
  151. void() player_zombie_paind5 = [ $paind5, player_zombie_paind6 ] { };
  152. void() player_zombie_paind6 = [ $paind6, player_zombie_paind7 ] { };
  153. void() player_zombie_paind7 = [ $paind7, player_zombie_paind8 ] { };
  154. void() player_zombie_paind8 = [ $paind8, player_zombie_paind9 ] { };
  155. void() player_zombie_paind9 = [ $paind9, player_zombie_paind10 ] { };
  156. void() player_zombie_paind10 = [ $paind10, player_zombie_paind11 ] { };
  157. void() player_zombie_paind11 = [ $paind11, player_zombie_paind12 ] { };
  158. void() player_zombie_paind12 = [ $paind12, player_zombie_paind13 ] { };
  159. void() player_zombie_paind13 = [ $paind13, player_stand1 ] {self.attack_finished=time; self.movetype=MOVETYPE_WALK;};
  160.  
  161. ////////////////////////////////////////////
  162. // 30 frames of paine for player_zombie, going to stand
  163. ////////////////////////////////////////////
  164.  
  165. void() player_zombie_paine1 = [ $paine1, player_zombie_paine2 ] {self.attack_finished=time+10; self.movetype=MOVETYPE_NONE;};
  166. void() player_zombie_paine2 = [ $paine2, player_zombie_paine3 ] { };
  167. void() player_zombie_paine3 = [ $paine3, player_zombie_paine4 ] { };
  168. void() player_zombie_paine4 = [ $paine4, player_zombie_paine5 ] { };
  169. void() player_zombie_paine5 = [ $paine5, player_zombie_paine6 ] { };
  170. void() player_zombie_paine6 = [ $paine6, player_zombie_paine7 ] { };
  171. void() player_zombie_paine7 = [ $paine7, player_zombie_paine8 ] { };
  172. void() player_zombie_paine8 = [ $paine8, player_zombie_paine9 ] { };
  173. void() player_zombie_paine9 = [ $paine9, player_zombie_paine10 ] { };
  174. void() player_zombie_paine10 = [ $paine10, player_zombie_paine11 ] { };
  175. void() player_zombie_paine11 = [ $paine11, player_zombie_paine12 ] { };
  176. void() player_zombie_paine12 = [ $paine12, player_zombie_paine13 ] { };
  177. void() player_zombie_paine13 = [ $paine13, player_zombie_paine14 ] { };
  178. void() player_zombie_paine14 = [ $paine14, player_zombie_paine15 ] { };
  179. void() player_zombie_paine15 = [ $paine15, player_zombie_paine16 ] { };
  180. void() player_zombie_paine16 = [ $paine16, player_zombie_paine17 ] { };
  181. void() player_zombie_paine17 = [ $paine17, player_zombie_paine18 ] { };
  182. void() player_zombie_paine18 = [ $paine18, player_zombie_paine19 ] { };
  183. void() player_zombie_paine19 = [ $paine19, player_zombie_paine20 ] { };
  184. void() player_zombie_paine20 = [ $paine20, player_zombie_paine21 ] { };
  185. void() player_zombie_paine21 = [ $paine21, player_zombie_paine22 ] { };
  186. void() player_zombie_paine22 = [ $paine22, player_zombie_paine23 ] { };
  187. void() player_zombie_paine23 = [ $paine23, player_zombie_paine24 ] { };
  188. void() player_zombie_paine24 = [ $paine24, player_zombie_paine25 ] { };
  189. void() player_zombie_paine25 = [ $paine25, player_zombie_paine26 ] { };
  190. void() player_zombie_paine26 = [ $paine26, player_zombie_paine27 ] { };
  191. void() player_zombie_paine27 = [ $paine27, player_zombie_paine28 ] { };
  192. void() player_zombie_paine28 = [ $paine28, player_zombie_paine29 ] { };
  193. void() player_zombie_paine29 = [ $paine29, player_zombie_paine30 ] { };
  194. void() player_zombie_paine30 = [ $paine30, player_stand1 ] {self.attack_finished=time; self.movetype=MOVETYPE_WALK;};
  195.  
  196. //** PATCH_BEGIN - morph2 - Turrican ****
  197. void(entity attacker, float take) player_zombie_pain =
  198. {
  199.     if(self.health < 70)
  200.         self.health=70;
  201.     if(self.pain_finished > time)
  202.         return;
  203.  
  204. //    if(random()>0.50) sound (self, CHAN_VOICE, "zombie/z_pain.wav", 1, ATTN_NORM);
  205. //    else sound(self, CHAN_VOICE, "zombie/z_pain1.wav", 1, ATTN_NORM);
  206.     PainSound();
  207.  
  208.     if(take > 60)
  209.     {
  210.         if(random()>0.50)
  211.         {
  212.             player_zombie_paine1();
  213.             self.pain_finished = time + 2.9;
  214.             self.attack_finished = time + 2.9;
  215.         }
  216.         else
  217.         {
  218.             player_zombie_painb1();
  219.             self.pain_finished = time + 2.7;
  220.             self.attack_finished = time + 2.7;
  221.         }
  222.     }
  223.     else
  224.     {
  225.         if(random()>0.66)
  226.         {
  227.             player_zombie_paina1();
  228.             self.pain_finished = time + 1.1;
  229.             self.attack_finished = time + 1.1;
  230.         }
  231.         else if(random()>0.5)
  232.         {
  233.             player_zombie_painc1();
  234.             self.pain_finished = time + 1.7;
  235.             self.attack_finished = time + 1.7;
  236.         }
  237.         else
  238.         {
  239.             player_zombie_paind1();
  240.             self.pain_finished = time + 1.2;
  241.             self.attack_finished = time + 1.2;
  242.         }
  243.     }
  244. };
  245. //** PATCH_END - morph2 - Turrican ******
  246.  
  247. void() player_zombie_jump = {
  248.     // Zombies can't jump
  249. };
  250.  
  251. void() player_ZombieFireGrenade =
  252. {
  253.     local    entity missile, mpuff;
  254.  
  255.     sound (self, CHAN_WEAPON, "zombie/z_shot1.wav", 1, ATTN_NORM);
  256.  
  257.     self.punchangle_x = -2;
  258.  
  259.     missile = spawn ();
  260.     missile.owner = self;
  261.     missile.movetype = MOVETYPE_BOUNCE;
  262.     missile.solid = SOLID_BBOX;
  263.     missile.classname = "grenade";
  264.  
  265. // set missile speed
  266.  
  267.     makevectors (self.v_angle);
  268.  
  269.     if(self.v_angle_x)
  270.         missile.velocity = v_forward*600 + v_up * 200 + crandom()*v_right*10 + crandom()*v_up*10;
  271.     else {
  272.         missile.velocity = aim(self, 10000);
  273.         missile.velocity = missile.velocity * 600;
  274.         missile.velocity_z = 200;
  275.     }
  276.  
  277.     missile.avelocity = '3000 1000 2000';
  278.  
  279.     missile.angles = vectoangles(missile.velocity);
  280.  
  281.     missile.touch = ZombieGrenadeTouch;
  282.  
  283. // set missile duration
  284.     missile.nextthink = time + 2.5;
  285.     missile.think = SUB_Remove;
  286.  
  287.     setmodel (missile, "progs/zom_gib.mdl");
  288.     setsize (missile, '0 0 0', '0 0 0');
  289.     setorigin (missile, self.origin);
  290. };
  291. ////////////////////////////////////////////
  292. // 13 frames of atta for player_zombie, going to stand
  293. ////////////////////////////////////////////
  294.  
  295. void() player_zombie_atta1 = [ $atta1, player_zombie_atta2 ] { };
  296. void() player_zombie_atta2 = [ $atta2, player_zombie_atta3 ] { };
  297. void() player_zombie_atta3 = [ $atta3, player_zombie_atta4 ] { };
  298. void() player_zombie_atta4 = [ $atta4, player_zombie_atta5 ] { };
  299. void() player_zombie_atta5 = [ $atta5, player_zombie_atta6 ] { };
  300. void() player_zombie_atta6 = [ $atta6, player_zombie_atta7 ] { };
  301. void() player_zombie_atta7 = [ $atta7, player_zombie_atta8 ] { };
  302. void() player_zombie_atta8 = [ $atta8, player_zombie_atta9 ] { };
  303. void() player_zombie_atta9 = [ $atta9, player_zombie_atta10 ] { };
  304. void() player_zombie_atta10 = [ $atta10, player_zombie_atta11 ] { };
  305. void() player_zombie_atta11 = [ $atta11, player_zombie_atta12 ] { };
  306. void() player_zombie_atta12 = [ $atta12, player_zombie_atta13 ] { };
  307. void() player_zombie_atta13 = [ $atta13, player_stand1 ] { player_ZombieFireGrenade(); self.attack_finished=time; };
  308.  
  309. ////////////////////////////////////////////
  310. // 14 frames of attb for player_zombie, going to stand
  311. ////////////////////////////////////////////
  312.  
  313. void() player_zombie_attb1 = [ $attb1, player_zombie_attb2 ] { };
  314. void() player_zombie_attb2 = [ $attb2, player_zombie_attb3 ] { };
  315. void() player_zombie_attb3 = [ $attb3, player_zombie_attb4 ] { };
  316. void() player_zombie_attb4 = [ $attb4, player_zombie_attb5 ] { };
  317. void() player_zombie_attb5 = [ $attb5, player_zombie_attb6 ] { };
  318. void() player_zombie_attb6 = [ $attb6, player_zombie_attb7 ] { };
  319. void() player_zombie_attb7 = [ $attb7, player_zombie_attb8 ] { };
  320. void() player_zombie_attb8 = [ $attb8, player_zombie_attb9 ] { };
  321. void() player_zombie_attb9 = [ $attb9, player_zombie_attb10 ] { };
  322. void() player_zombie_attb10 = [ $attb10, player_zombie_attb11 ] { };
  323. void() player_zombie_attb11 = [ $attb11, player_zombie_attb12 ] { };
  324. void() player_zombie_attb12 = [ $attb12, player_zombie_attb13 ] { };
  325. void() player_zombie_attb13 = [ $attb12, player_zombie_attb14 ] { };
  326. void() player_zombie_attb14 = [ $attb14, player_stand1 ] { player_ZombieFireGrenade(); self.attack_finished=time; };
  327.  
  328. ////////////////////////////////////////////
  329. // 12 frames of attc for player_zombie, going to stand
  330. ////////////////////////////////////////////
  331.  
  332. void() player_zombie_attc1 = [ $attc1, player_zombie_attc2 ] { };
  333. void() player_zombie_attc2 = [ $attc2, player_zombie_attc3 ] { };
  334. void() player_zombie_attc3 = [ $attc3, player_zombie_attc4 ] { };
  335. void() player_zombie_attc4 = [ $attc4, player_zombie_attc5 ] { };
  336. void() player_zombie_attc5 = [ $attc5, player_zombie_attc6 ] { };
  337. void() player_zombie_attc6 = [ $attc6, player_zombie_attc7 ] { };
  338. void() player_zombie_attc7 = [ $attc7, player_zombie_attc8 ] { };
  339. void() player_zombie_attc8 = [ $attc8, player_zombie_attc9 ] { };
  340. void() player_zombie_attc9 = [ $attc9, player_zombie_attc10 ] { };
  341. void() player_zombie_attc10 = [ $attc10, player_zombie_attc11 ] { };
  342. void() player_zombie_attc11 = [ $attc11, player_zombie_attc12 ] { };
  343. void() player_zombie_attc12 = [ $attc12, player_stand1 ] { player_ZombieFireGrenade(); self.attack_finished=time; };
  344.  
  345. void() player_zombie_attack = {
  346.     self.attack_finished=time+10;
  347.     if(random()>0.66) player_zombie_atta1();
  348.     else if(random()>0.5) player_zombie_attb1();
  349.     else player_zombie_attc1();
  350. };
  351.  
  352. void() player_zombie_impulse = {
  353.     // Zombie has only one weapon
  354. };
  355.  
  356. string() player_zombie_killmsg = {
  357.     return " was splatted to death by ";
  358. };
  359.  
  360. string() player_zombie_killmsg2 = {
  361.     return ".\n";
  362. };
  363.  
  364. void() player_zombie_become = {
  365. //** PATCH_BEGIN - morph2 - Turrican ****
  366. //    bprint(self.netname);
  367. //    bprint(" has become a zombie.\n");
  368.     sprint( self, "You have become a zombie.\n");
  369.  
  370. // Stop the morph from flying.
  371.     if (self.flags & FL_FLY)
  372.     {
  373.         localcmd("fly");
  374.         self.flags = self.flags - FL_FLY;
  375.     }
  376. //** PATCH_END - morph2 - Turrican ******
  377.     self._stand=player_zombie_stand;
  378.     self._run=player_zombie_run;
  379.     self._pain=player_zombie_pain;
  380. //** PATCH_BEGIN - morph2 - Turrican ****
  381.     self._jump=SUB_Null;    // Now zombies can jump.
  382.     self._jump2=SUB_Null;
  383. //** PATCH_END - morph2 - Turrican ******
  384.     self._attack=player_zombie_attack;
  385.     self._impulse=player_zombie_impulse;
  386.     self._can_get_p=SUB_False;
  387.     self._killmsg=player_zombie_killmsg;
  388.     self._killmsg2=player_zombie_killmsg2;
  389.     setmodel(self,"progs/zombie.mdl");
  390.     self.modelindex_morph=self.modelindex;
  391.     self.weaponmodel="";
  392.     self.view_ofs = '0 0 22';
  393.     if(!deathmatch) setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  394.     else     setsize (self, '-16 -16 -24', '16 16 40');
  395.     self.health = self.health * 0.75 / self.health_modifier;
  396.     self.health_modifier = 0.75;
  397.     makevectors(self.v_angle);
  398.     spawn_tfog(self.origin + 20 * v_forward);
  399.     DropBackpack2();
  400. //** PATCH_BEGIN - morph2 - Turrican ****
  401.     self.currentammo=0;
  402. // Make morphs ignore player colors.
  403.     if (self.colormap != 0)
  404.     {
  405.         self.temp_colormap = self.colormap;
  406.         self.colormap = 0;
  407.     }
  408. // Make morphs ignore player skins.
  409.     if (self.skin != 0)
  410.     {
  411.         self.temp_skin = self.skin;
  412.         self.skin = 0;
  413.     }
  414. //** PATCH_END - morph2 - Turrican ******
  415. };
  416.  
  417.